A significant problem in connection with computer system operation is that of verifying and maintaining data integrity. In this regard, there are different levels of data integrity with which to be concerned. First, there is the matter of determining whether the payload of a data packet is correct; techniques such as cyclical redundancy checks (“CRC”), parity checks, and error correction code (“ECC”) checks are often employed for this purpose. Second, there is the matter of determining whether the data comprising the header of a packet is correct.
If the payload of a packet is corrupted, the packet will arrive at the proper destination, at which point, upon detection of the data corruption, either the data will be corrected and the corrected data passed on to the next destination or the data will remain corrupted and the next destination will be notified of the corruption.
Corruption of header data can result in a much more serious problem. Because the header contains routing (i.e., source and destination) information, errors in the header of a packet can cause the packet to be misrouted. In any high performance computer system, the goal is to send and receive data as quickly as possible. As a result, one of the key fields of a header is the field that identifies the destination of the packet.
For example, in a large computer system with components everywhere, assume a packet originating at point A is destined for point B, but ends up at point C. This error in which a packet ends up at the wrong destination is significantly less recoverable than one in which a corrupted packet arrived at the proper destination. Additionally, when the packet is being sent from point A, there is typically not enough time to use parity or ECC techniques.
As a result of the foregoing problems, voting circuits have been developed as an alternative to performing CRC or parity or ECC checks. To use a voting circuit, multiple copies of data are created and compared at the voting circuit. If the copies all match, then it is assumed that all of them are correct. If not all of the copies match, the copy that matches the greatest number of other copies is assumed to be correct. While currently-available voting circuits provide faster data verification than CRC or parity or ECC checking, the speed with which they operate is not optimal.